package com.calculate;

import java.io.File;
import java.lang.reflect.Field;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;

/**
 * Calculate info
 *
 * @description: 数学计算信息 属性必须给public不然没法识别. 表达式用到的参数必须在类中定义，且必须是数字类型
 * @author: cyj
 * @date 2022 -05-17 20:51:40
 *
 *
 */
public interface Exp4jCalculateInfo {


    /*
    * 四舍五入小数位
    * */
    default Integer scale() {
        return null;
    }

    /**
     * Gets expression 获取表达式
     *
     * @return the expression
     */
    String getExpression();

    default Map<String, BigDecimal> params() {

        Field[] fields = this.getClass().getDeclaredFields();

        Map<String, BigDecimal> params = new HashMap<>();

        for (Field file :
                fields) {
            if (file.getType() == BigDecimal.class) {
                String name = file.getName();
                try {
                    Object value = file.get(this);
                    params.put(name, (BigDecimal) value);
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }

        return params;
    }

}
